<?php
namespace Home\Model;
use Think\Model;
class UserModel extends BaseModel {
    /**
    *手机号登录，调第三方接口获取验证码
    *@param $phone int 用户手机号
    *@return array('code'=>200/201,
     *                          'status'=>success/false,
     *                          'message'=>'成功/失败/超时')
    */
    public function getMsgCode($phone){         
        $code=rand(1000,9999);
        //引入第三方库，并且将文件名改为原文件名.class.php的形式
        import('Org.Alidayu.top.TopClient');
        import('Org.Alidayu.top.ResultSet');
        import('Org.Alidayu.top.RequestCheckUtil');
        import('Org.Alidayu.top.TopLogger');
        import('Org.Alidayu.top.request.AlibabaAliqinFcSmsNumSendRequest');     
        $c = new \TopClient;
        $c->appkey = C('APPKEY');
        $c->secretKey = C('SECRET');
        $req = new \AlibabaAliqinFcSmsNumSendRequest;
        // $req->setExtend("123456");//确定发给的是哪个用户，参数为用户id
        $req->setSmsType("normal");
        $req->setSmsFreeSignName(C('SIGN_NAME'));
        $req->setSmsParam("{'number':'".$code."','product':'".C('PRODUCT')."'}");
        //这里设定的是发送的短信内容：验证码${number}，您正在进行${product}身份验证，打死不要告诉别人哦！”,阿里大鱼管理后台添加短信模板内容，此两个为替换模板中参数
        $req->setRecNum($phone);//参数为用户的手机号码
        $req->setSmsTemplateCode(C('MSG_TMP_ID'));//短信模板id
        $resp = $c->execute($req);
        // var_dump($resp);
        //验证码发送成功，将验证码相关数据写进数据库
        if ($resp->code==0) {  
                if(session('code')){
                   session('code',null); 
                   session('expire',null); 
                }
                 session('code',$code);
                 session('expire',time()+60);//验证码过期时间60秒
            $data['code']=200;
            $data['status']='success';
            $data['msg']='验证码获取成功！';
        }else if ($resp->sub_code=='isv.BUSINESS_LIMIT_CONTROL') {
            $data['code']=201;
            $data['status']='false';
            $data['msg']='验证码获取次数超限，请稍后重试！';
        }else{
            $data['code']=201;
            $data['status']='false';
            $data['msg']='验证码获取失败！';
        } 
        return $data;
    }
    /**
    *判断验证码是否过期
    *@param $phone int 用户手机号
    *@return array('level'=>等级,'userInfo'=用户信息)
    */
    public function checkCode($phone,$code=''){
        $Model=M('user');
        if ($code) {
            if (session('code') && session('expire')<time()) {
                $data['code']=201;
                $data['status']='false';
                $data['msg']='验证码已过期！';
            }else if($code!=session('code')){
                $data['code']=201;
                $data['status']='false';
                $data['msg']='验证码错误！';
            }else if($code==session('code')){
                 // 验证成功，电话写进数据库，完成绑定
                $re=$Model->field('user_id')->where('phone='.$phone)->find();
                if (!$re['user_id']) {
                    $re=$Model->add(array('phone'=>$phone,'add_time'=>time()));
                    session('run_user_id',$Model->getLastInsID());
                }else{
                    session('run_user_id',$re['user_id']);
                }
                $data['code']=200;
                $data['status']='success';
                $data['msg']='验证成功！';
            }
        }else{
            $re=$Model->field('user_id')->where('phone='.$phone)->find();
            if ($re['user_id']) {
                session('run_user_id',$re['user_id']);
                $data['code']=200;
                $data['status']='success';
                $data['msg']='验证成功！';
            }else{
                $data['code']=201;
                $data['status']='false';
                $data['msg']='验证失败！';
            }
        }
        
        return $data;

    }
    /**
    *获取指定用户详细信息,包括等级
    *@param $user_id int 用户id
    *@return array('level'=>等级,'userInfo'=用户信息)
    */
    public function getUserById($user_id){
        $Model=M('user');
        $data=$Model->where('user_id='.$user_id)->find();     
        return $data;
    }
    //通过手机号获取用户昵称/id/状态
    public function getUserByPhone($phone){
        $Model=M('user');
        $data=$Model->where('phone='.$phone)->find();     
        return $data;
    }
    //获取用户头像
    public function getUserIcon($user_id){
        $Model=M('user');
        $data=$Model->field('icon')->where('user_id='.$user_id)->find();     
        return $data['icon'];
    }
    /**
    *获取用户总数
    *@return int
    */
    public function getUserCount(){
         $Model=M('user');
        $count=$Model->count();
        if (floor($count/10000)>0) {
            $count=round($count/10000,1);
        }
        return $count;
    }

    /**
    *获取等级配置信息
    *@return array()
    */
    public function getLevelCon(){
        $Model=M('level');
        $levelCon=$Model->select();
        return $levelCon;

    }
     /**
    *获取用户等级
    *@param $integral int  用户总积分
    *@return int 当前等级
    */
    public function getLevel($integral){
        $re=$this->getLevelCon();
        foreach ($re as $k => $v) {
                if ($re[$k+1]['integral']) {
                    if ($integral>=$v['integral'] && $integral<$re[$k+1]['integral']) {
                        $level=$v['level'];
                    }
                }else{
                    if ($integral>=$v['integral']) {
                        $level=$v['level'];
                    }
                }               
            }
        $levelArr=array('level'=>$level,'levelCon'=>$re);
        return $levelArr;

    }

    /**
    *用户积分累加
    *@param $user_id int 用户id
    *@param $number int 积分数量
    *@return boolean  操作是否成功
    */
    public function cumsumIntegral($user_id,$number){
        $Model=M('user');
        $re=$Model->where('user_id='.$user_id)->setInc('integral_num',$number);
        return $re;
    }
    /**
    *用户发帖量累加
    *@param $user_id int 用户id
    *@return boolean  操作是否成功
    */
    public function cumsumPosting($user_id){
        $Model=M('user');
        $re=$Model->where('user_id='.$user_id)->setInc('post_num',1);
        return $re;
    }

    /**
    *用户每日签到次数累加
    *@param $user_id int 用户id
    *@param $number int 积分数量
    *@return boolean  操作是否成功
    */
    public function cumsumCheck($user_id){
        $Model=M('user');
        $re=$Model->where('user_id='.$user_id)->setInc('check_num',1);
        return $re;
    } 
    /**
    *活动报名/签到次数累加
    *@param $user_id int 用户id
    *@param $type int 类型，1-活动报名，2-活动签到
    *@return boolean  操作是否成功
    */
    public function cumsumActiveApply($active_id,$type){
        $Model=M('active');
        switch ($type) {
            case 1:
                $re=$Model->where('active_id='.$active_id)->setInc('apply_num',1);
                break;
             case 2:
                 $re=$Model->where('active_id='.$active_id)->setInc('check_num',1);
                break;
        }
        
        return $re;
    } 
    /**
    *添加积分日志
    *@param $user_id int 用户id
    *@param $number int 积分数量
    *@param $type int 获取积分类型，1-活动签到，2-每日签到
    *@return  integer 新增数据的id 
    */
    public function addIntegral($user_id,$number,$type,$active_id=0){
        switch ($type) {
            case 2:
                $t=1;
                break;
             case 3:
                 $t=2;
                break;
        }
        $Model=M('integral');
        $data=array('user_id'=>$user_id,
                    'number'=>$number,
                    'type'=>$t,
                    'active_id'=>$active_id,
                    'add_time'=>time()
                    );
        $re=$Model->add($data);
        return $re;
    }

    /**
    *添加签到、报名日志，并添加积分日志，然后实现每日签到次数、积分累加
    *@param $user_id int 用户id
    *@param $active_id int 活动id，非必选参数
    *@param $type int 日志类型，1-活动报名，2-活动签到(10分)，3-每日签到(1分)
     *@param $number int 积分数量，活动签到(10分)，每日签到(1分)
    *@return  boolean  操作是否成功
    */
    public function addApplyCheckLog($user_id,$type,$active_id=0,$number=1){
        $Model=M('apply_check');
        if ($type==3) {
            $t=$Model->where(array('type'=>3,'user_id'=>$user_id))->order('id desc')->limit(1)->find();
            // var_dump($t);die;
            if ($t&&(date('Ymd',$t['add_time'])==date('Ymd'))) {
                return 3;
            }
        }
        
        $data=array('user_id'=>$user_id,
                    'active_id'=>$active_id,
                    'type'=>$type 
                    );
        if ($type==2) {
            $data['modify_time']=time();
            $re=$Model->where(array('active_id'=>$active_id))->save($data);
        }else{
            $data['add_time']=time();
            $re=$Model->add($data);
        }
        
        if ($re) {
            if ($type==2 || $type==3) {
                $res=$this->addIntegral($user_id,$number,$type,$active_id);
                if ($res) {
                    if ($type=3) {
                        $re1=$this->cumsumCheck($user_id);
                    }
                    $re2=$this->cumsumIntegral($user_id,$number);
                    if ($re1 || $re2) {
                        return true;
                    }
                    return false;
                }
                return true; 
            }
            return true;
        }
        return false;
    }

    
}